<?php
class M_servicioxcliente extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener los servicios de clientes existentes tanto activos como inactivos, pero no los borrados (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT servicioxcliente.*, cliente.idCliente as idCliente, cliente.apellido as apellidoCliente, cliente.nombre as nombreCliente, servicio.nombre as nombreServicio, (SELECT apellido FROM cliente WHERE cliente.idCliente=servicioxcliente.idReferente) as apellidoReferente, (SELECT nombre FROM cliente WHERE cliente.idCliente=servicioxcliente.idReferente) as nombreReferente, DATE_FORMAT(servicioxcliente.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, DATE_FORMAT(servicioxcliente.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada, DATE_FORMAT(servicioxcliente.fechaCreacion,'%d/%m/%Y') AS fechaCreacionFormateadaCorta
									  FROM servicioxcliente, servicio, cliente
									  WHERE servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.idCliente=cliente.idCliente AND servicioxcliente.estado<>-1 AND cliente.estado<>-1 $restriccion
									  ORDER BY cliente.apellido ASC, cliente.nombre ASC, servicio.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los servicios de clientes activos existentes	
	function buscarActivos($restriccion=null){
		$consulta = $this->db->query("SELECT servicioxcliente.*, cliente.idCliente as idCliente, cliente.apellido as apellidoCliente, cliente.nombre as nombreCliente, servicio.nombre as nombreServicio, DATE_FORMAT(servicioxcliente.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, DATE_FORMAT(servicioxcliente.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada, DATE_FORMAT(servicioxcliente.fechaCreacion,'%d/%m/%Y') AS fechaCreacionFormateadaCorta
									  FROM servicioxcliente, servicio, cliente
									  WHERE servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.idCliente=cliente.idCliente AND servicioxcliente.estado=1 AND cliente.estado<>-1 $restriccion
									  ORDER BY cliente.apellido ASC, cliente.nombre ASC, servicio.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener el total a cobrar de todos los servicios de clientes activos existentes	
	function buscarTotal($restriccion=null){
		$consulta = $this->db->query("SELECT SUM(servicioxcliente.precio) as total
									  FROM servicioxcliente
									  WHERE servicioxcliente.estado=1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener el total a cobrar por mes de todos los servicios de clientes activos existentes o de uno en especifico
	function buscarTotalPorMes($restriccion=null){
		$consulta = $this->db->query("SELECT SUM(servicioxcliente.precio/servicioxcliente.cicloPago) as total
									  FROM servicioxcliente
									  WHERE servicioxcliente.estado=1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener el total a cobrar por mes de todos los servicios de clientes activos existentes o de uno en especifico
	function buscarGanaciaReferenteTotalPorMes($restriccion=null){
		$consulta = $this->db->query("SELECT SUM(servicioxcliente.gananciaReferente/servicioxcliente.cicloPago) as total
									  FROM servicioxcliente
									  WHERE servicioxcliente.estado=1 $restriccion");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar un servicio de un cliente
	function eliminar($idSxC=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `servicioxcliente` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `servicioxcliente`.`idSxC` = " . $this->db->escape($idSxC) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear un servicio a un cliente
	function crear($hash=null, $idServicio=null, $idCliente=null, $cicloPago=null, $precio=null, $enviarFacturas=null, $enviarNotificaciones=null, $url=null, $urlAdmin=null, $usuarioWeb=null, $passwordWeb=null, $usuarioStreaming=null, $ip=null, $puerto=null, $passwordStreaming=null, $codigoReproductor=null, $facebook=null, $twitter=null, $codigoBarras=null, $botonPago=null, $idReferente=null, $gananciaReferente=null, $observaciones=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `servicioxcliente` (`idSxC`, `hash`, `idServicio`, `idCliente`, `cicloPago`, `precio`, `enviarFacturas`, `enviarNotificaciones`, `url`, `urlAdmin`, `usuarioWeb`, `passwordWeb`, `usuarioStreaming`, `ip`, `puerto`, `passwordStreaming`, `codigoReproductor`, `facebook`, `twitter`, `codigoBarras`, `botonPago`, `idReferente`, `gananciaReferente`, `observaciones`, `fechaCreacion`, `estado`, `idCreador`) VALUES 
											     (NULL,".$this->db->escape($hash).",".$this->db->escape($idServicio).",".$this->db->escape($idCliente).",".$this->db->escape($cicloPago).",".$this->db->escape($precio).",".$this->db->escape($enviarFacturas).",".$this->db->escape($enviarNotificaciones).",".$this->db->escape($url).",".$this->db->escape($urlAdmin).",".$this->db->escape($usuarioWeb).",".$this->db->escape($passwordWeb).",".$this->db->escape($usuarioStreaming).",".$this->db->escape($ip).",".$this->db->escape($puerto).",".$this->db->escape($passwordStreaming).",".$this->db->escape($codigoReproductor).",".$this->db->escape($facebook).",".$this->db->escape($twitter).",".$this->db->escape($codigoBarras).",".$this->db->escape($botonPago).",".$this->db->escape($idReferente).",".$this->db->escape($gananciaReferente).",".$this->db->escape($observaciones).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un servicio del cliente en particular usado generalmente en el formulario de modificar
	function get($idSxC=null){
		$consulta = $this->db->query("SELECT servicioxcliente.*, cliente.apellido as apellido, cliente.nombre as nombre, servicio.nombre as nombreServicio
									  FROM servicioxcliente, cliente, servicio
									  WHERE servicioxcliente.idCliente=cliente.idCliente AND servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.estado<>-1 AND servicioxcliente.idSxC=".$this->db->escape($idSxC)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver un servicio del cliente en particular segun su hash
	function getHash($hash=null){
		$consulta = $this->db->query("SELECT servicioxcliente.*, cliente.apellido as apellido, cliente.nombre as nombre, servicio.nombre as nombreServicio
									  FROM servicioxcliente, cliente, servicio
									  WHERE servicioxcliente.idCliente=cliente.idCliente AND servicioxcliente.idServicio=servicio.idServicio AND servicioxcliente.estado<>-1 AND servicioxcliente.hash=".$this->db->escape($hash)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver un servicio de cliente anterior o siguiente a uno en particular 
	function getContiguo($idSxC=null, $cant=null){
		do{
			$idSxC+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM servicioxcliente
										  WHERE idSxC=".$this->db->escape($idSxC)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1');
		
		return($consulta->row()->idSxC);
	}
	
	//Este metodo se utiliza para modificar un servicio de un cliente
	function modificar($idSxC=null, $idServicio=null, $cicloPago=null, $precio=null, $enviarFacturas=null, $enviarNotificaciones=null, $url=null, $urlAdmin=null, $usuarioWeb=null, $passwordWeb=null, $usuarioStreaming=null, $ip=null, $puerto=null, $passwordStreaming=null, $codigoReproductor=null, $facebook=null, $twitter=null, $codigoBarras=null, $botonPago=null, $idReferente=null, $gananciaReferente=null, $observaciones=null, $estado=null){
		$consulta = $this->db->query("UPDATE `servicioxcliente`
									 SET `idServicio` = ". $this->db->escape($idServicio) .",
										 `cicloPago` = ". $this->db->escape($cicloPago) .",
										 `precio` = ". $this->db->escape($precio) .",
										 `enviarFacturas` = ". $this->db->escape($enviarFacturas) .",
										 `enviarNotificaciones` = ". $this->db->escape($enviarNotificaciones) .",
										 `url` = ". $this->db->escape($url) .",
										 `urlAdmin` = ". $this->db->escape($urlAdmin) .",
										 `usuarioWeb` = ". $this->db->escape($usuarioWeb) .",
										 `passwordWeb` = ". $this->db->escape($passwordWeb) .",
										 `usuarioStreaming` = ". $this->db->escape($usuarioStreaming) .",
										 `ip` = ". $this->db->escape($ip) .",
										 `puerto` = ". $this->db->escape($puerto) .",
										 `passwordStreaming` = ". $this->db->escape($passwordStreaming) .",
										 `codigoReproductor` = ". $this->db->escape($codigoReproductor) .",
										 `facebook` = ". $this->db->escape($facebook) .",
										 `twitter` = ". $this->db->escape($twitter) .",
										 `codigoBarras` = ". $this->db->escape($codigoBarras) .",
										 `botonPago` = ". $this->db->escape($botonPago) .",
										 `idReferente` = ". $this->db->escape($idReferente) .",
										 `gananciaReferente` = ". $this->db->escape($gananciaReferente) .",										 
										 `observaciones` = ". $this->db->escape($observaciones) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `servicioxcliente`.`idSxC` = " . $this->db->escape($idSxC) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para modificar el codigo para estadisticas de un servicio
	function modificarCodigoContabilizador($idSxC=null, $codigoContabilizador=null){
		$consulta = $this->db->query("UPDATE `servicioxcliente`
									 SET `codigoContabilizador` = ". $this->db->escape($codigoContabilizador) ."										 
							         WHERE `servicioxcliente`.`idSxC` = " . $this->db->escape($idSxC) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para modificar el hash de un servicio
	function modificarHash($idSxC=null, $hash=null){
		$consulta = $this->db->query("UPDATE `servicioxcliente`
									 SET `hash` = ". $this->db->escape($hash) ."										 
							         WHERE `servicioxcliente`.`idSxC` = " . $this->db->escape($idSxC) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>